#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>


int main()
{
  printf("当前进程的开始代码：\n");

  //execl("/usr/bin/ls","ls",NULL);//相当于在命名行上输入 ls
  execl("/usr/bin/ls","ls","-a",NULL);//相当于在命名行输入ls -al
  //正确执行不会调用后面的代码，错误执行才会调用后面的代码
  exit(1);
  
  //printf("当前进程的结束代码！\n");
  return 0;
}



//int main()
//{
 // pid_t id=fork();
 // if(id==0)
 // {
 //   int cnt=5;
 //   while(cnt)
 //   {
 //     printf("我是子进程:%d\n",cnt--);
 //     sleep(1);
 //   }
 //   exit(11);
 // }
 // else
 // {
 //   int quit=0;
 //   while(!quit)
 //   {
 //     int status=0;
 //     pid_t res=waitpid(-1,&status,WNOHANG);
 //     if(res>0)
 //     {
 //       //等待成功  子进程退出
 //       printf("等待子进程退出成功，退出码：%d\n",WEXITSTATUS(status));
 //       quit=1;
 //     }
 //     else if(res==0)
 //     {
 //       //等待成功，但子进程未退出
 //       printf("子进程还在运行，暂时还没有退父进程可以再等等，处理一下其他的事情\n");
 //     }
 //     else{
 //       //等待失败
 //       printf("wait失败\n");
 //       quit=1;
 //     }
 //     sleep(1);
 //   }
 //
 //
 //
 //
 //
 //
 //
 //   //int status=0;
 //   // 只有子进程退出的时候，父进程才会waitpid函数进行返回。父进程还活着
 //   //waitpid/wait 可以在目前的情况下，让进程退出具有一定的顺序性！
 //   //将来可以让父进程进行更多的收尾工作
 //   //
 //   //options :默认为1，代表阻塞状态. WNOHANG:叫做非阻塞
 //   //pid_t result=waitpid(id,&status,0);//默认在阻塞状态等待子进程状态变化
 //   //if(result>0)
 //   //{
 //   //  //printf("父进程等待成功,退出码：%d,退出信号:%d\n",(status>>8)&0xFF,status & 0x7F);
 //   //  if(WIFEXITED(status))
 //   //  {
 //   //    //子进程正常退出
 //   //    printf("子进程执行完毕，子进程的退出码：%d\n",WIFEXITED(status));
 //   //  }
 //   //  else{
 //   //    printf("子进程异常退出: %d\n",WIFEXITED(status));
 //   //  }
 //   //}
 // }
//}
